// interface 可以继承、合并

interface PersonInterface {
  name: string  // 姓名
  age: number   // 年龄
}

interface PersonInterface {
  speak: () => void
}

interface StudentInterface extends PersonInterface {
  grade: string   // 您寄
}

const studentI: StudentInterface = {
  name: '李四',
  age: 18,
  grade: "高二",
  speak() {
    console.log(this.name, this.age, this.grade)
  },
}

// type 的交叉类型

type suzi = number  // 定义类型别名

// 使用 type 定义 Person 类型, 并通过交叉类型实现属性的合并
type PersonType = {
  name: string  // 姓名
  age: number   // 年龄
} & {
  speak: () => void
}

// 使用 type 定义 Student 类型，并通过交叉类型继承 PersonType
type StudentType = PersonType & {
  grade: string   // 年级
}

const studentT: StudentType = {
  name: '李四',
  age: 18,
  grade: '高二',
  speak() {
    console.log(this.name, this.age, this.grade)
  }
}